2016_kurokawa_agricultural_city_1.py

#

SPDX-FileCopyrightText: 2016 Hugo Cormerais SPDX-FileCopyrightText: 2024 AlICe laboratory https://alicelab.be

SPDX-License-Identifier: GPL-3.0-or-later

import bpy
import random
from random import *


print("__________________")
bpy.ops.object.select_all(action="SELECT")
bpy.ops.object.delete()
#

DEFINITION GEOMETRIES #####################################

#
def micro_cel(position, dimension):
    x, y, z = position
    sx, sy, sz = dimension
    position = (x + sx / 2, y + sy / 2, z + sz / 2)
    bpy.ops.mesh.primitive_cube_add(radius=0.5, location=position)
    bpy.ops.transform.resize(value=dimension)
#
def circu(position, dimension):
    x, y, z = position
    sx, sy, sz = dimension
    position = (x + sx / 2, y + sy / 2, z + sz / 2)
    bpy.ops.mesh.primitive_cube_add(radius=0.5, location=position)
    bpy.ops.transform.resize(value=dimension)
#
def infrastructure(position):
    x, y, z = position
    circu((-0.8 + x, -0.4 + y, -0.07 + z), (5.6, 0.4, 0.13))
    circu((-0.8 + x, 4 + y, -0.07 + z), (5.6, 0.4, 0.13))
    circu((-0.4 + x, -0.8 + y, -0.07 + z), (0.4, 5.6, 0.13))
    circu((4 + x, -0.8 + y, -0.07 + z), (0.4, 5.6, 0.13))
#

1 DEFINITION CELLULES [100.100] #####################################

l_population = []
#

Trame micro cellules 4x4

def cel(position):
    x, y, z = position
    l_coord = []
    l_maison = []
    infrastructure((0 + x, 0 + y, 0))
#

for ix in range (0,4): for iy in range (0,4): l_coord.append ((ix+x,iy+y,0))

Suppression aléatoire micro cellules

for i in range (0,randint(1,16)): position1 = choice (l_coord) l_coord.remove (position1)

for coord_cel in l_coord: micro_cel (coord_cel,(1,1,0.06))

Importation maisons

position2 = sample (l_coord,randint (0,len(l_coord))) l_maison.append (position2) for i in position2: micro_cel (i,(0.2,0.2,0.2))

        l_population.append (i)"""
#DIVIDER
    l_circu = []
    for ix in range(1, randint(1, 4)):
        if len(l_coord) > 0:
            circu((ix + x, 0 + y, 0), (0.1, 4, 0.06))
            l_circu.append(circu)
    for iy in range(1, randint(1, 4)):
        if len(l_coord) > 0:
            circu((0 + x, iy + y, 0), (4, 0.1, 0.06))
            l_circu.append(circu)
#DIVIDER

l_cel_globale = []
#DIVIDER
def groupement_cel(position_group):
    x, y, z = position_group
    l_coord2 = []
#DIVIDER
    for ix in range(0, 5):
        for iy in range(0, 5):
            l_coord2.append((ix * 4.4 + 0.4 + x, iy * 4.4 + 0.4 + y, 0))
            l_cel_globale.append((ix * 4.4 + 0.4 + x, iy * 4.4 + 0.4 + y, 0))
#DIVIDER
    for i in range(0, randint(1, 3)):
        position2 = choice(l_coord2)
        l_coord2.remove(position2)

    for coord_group in l_coord2:
        cel(coord_group)
#DIVIDER

#DIVIDER

#DIVIDER
def groupement_cel_0(position_group0):
    x, y, z = position_group0
    l_coord2 = []

    for ix in range(0, 5):
        for iy in range(0, 5):
            l_coord2.append((ix * 4.4 + x, iy * 4.4 + y, 0))
            l_cel_globale.append((ix * 4.4 + x, iy * 4.4 + y, 0))
#DIVIDER
    for i in range(0, randint(1, 3)):
        position2 = choice(l_coord2)
        l_coord2.remove(position2)

    for coord_group in l_coord2:
        cel(coord_group)
#DIVIDER
    ix = randint(0, 4)
    for iy in range(5, randint(7, 9)):
        l_nord.append((ix * 4.4 + x, iy * 4.4 + y, 0))
        l_cel_globale.append((ix * 4.4 + x, iy * 4.4 + y, 0))
    print("nord----->", len(l_nord), l_nord)
    for point in l_nord:
        cel(point)
#DIVIDER
    iy = randint(1, 5)
    for ix in range(5, randint(7, 9)):
        l_est.append((ix * 4.4 + x, iy * 4.4 + y, 0))
    print("est----->", len(l_est), l_est)
    for point in l_est:
        cel(point)
#DIVIDER
    iy = randint(0, 4)
    for ix in range(1, randint(1, 4)):
        l_ouest.append((-4.4 * ix + x, iy * 4.4 + y, 0))
    print("ouest----->", len(l_ouest), l_ouest)
    for point in l_ouest:
        cel(point)
#DIVIDER

#DIVIDER

#DIVIDER
def groupement_cel_1(position_group):
    x, y, z = position_group
    l_coord2 = []
    for ix in range(0, 5):
        for iy in range(1, 6):
            l_coord2.append((ix * 4.4 + x, iy * -4.4 + y, 0))
            l_cel_globale.append((ix * 4.4 + x, iy * -4.4 + y, 0))
#DIVIDER
    for i in range(0, randint(1, 3)):
        position2 = choice(l_coord2)
        l_coord2.remove(position2)

    for coord_group in l_coord2:
        cel(coord_group)
#DIVIDER
    iy = randint(1, 5)
    for ix in range(5, randint(7, 9)):
        l_est_1.append((ix * 4.4 + x, iy * -4.4 + y, 0))
    print("est----->", len(l_est), l_est)
    for point in l_est_1:
        cel(point)
#DIVIDER
    ix = randint(0, 4)
    for iy in range(5, randint(7, 9)):
        l_nord_1.append((ix * 4.4 + x, iy * -4.4 + y, 0))
        l_cel_globale.append((ix * 4.4 + x, iy * -4.4 + y, 0))
    print("nord_1----->", len(l_nord_1), l_nord_1)
    for point in l_nord_1:
        cel(point)
#DIVIDER

#DIVIDER

#DIVIDER
def groupement_cel_2(position_group):
    x, y, z = position_group
    l_coord2 = []
    l_coord3 = []
    for ix in range(1, 6):
        for iy in range(1, 6):
            l_coord2.append((ix * -4.4 + x, iy * -4.4 + y, 0))
            l_coord3.append((ix * 4.4 + x, iy * 4.4 + y, 0))
#DIVIDER
    for i in range(0, randint(1, 3)):
        position2 = choice(l_coord2)
        l_coord2.remove(position2)

    for coord_group in l_coord2:
        cel(coord_group)
#DIVIDER

#DIVIDER

#DIVIDER
def groupement_cel_3(position_group):
    x, y, z = position_group
    l_coord2 = []
    l_coord3 = []
    for ix in range(1, 6):
        for iy in range(0, 5):
            l_coord2.append((ix * -4.4 + x, iy * 4.4 + y, 0))
            l_coord3.append((ix * 4.4 + x, iy * 4.4 + y, 0))
#DIVIDER
    for i in range(0, randint(1, 3)):
        position2 = choice(l_coord2)
        l_coord2.remove(position2)

    for coord_group in l_coord2:
        cel(coord_group)
#DIVIDER
    iy = randint(0, 4)
    for ix in range(5, randint(7, 9)):
        l_ouest_3.append((-4.4 * ix + x, iy * 4.4 + y, 0))
    print("ouest_3----->", len(l_ouest_3), l_ouest_3)
    for point in l_ouest_3:
        cel(point)
#DIVIDER
    ix = randint(0, 4)
    for iy in range(1, randint(1, 4)):
        l_nord_3.append((ix * -4.4 + x, iy * -4.4 + y, 0))
        l_cel_globale.append((ix * -4.4 + x, iy * -4.4 + y, 0))
    print("nord_3----->", len(l_nord_3), l_nord_3)
    for point in l_nord_3:
        cel(point)
#DIVIDER

l_nord = []
l_est = []
l_sud = []
l_ouest = []

l_nord_1 = []
l_est_1 = []
l_ouest_1 = []

l_nord_3 = []
l_est_3 = []
l_ouest_3 = []
#DIVIDER
def croissance_nord(position_croissance_nord):
    x, y, z = position_croissance_nord
#DIVIDER

    ix = randint(0, 4)
    for iy in range(5, randint(7, 9)):
        l_nord.append((ix * 4.4 + 0.4 + x, iy * 4.4 + 0.4 + y, 0))
        l_cel_globale.append((ix * 4.4 + 0.4 + x, iy * 4.4 + 0.4 + y, 0))
    print("nord----->", len(l_nord), l_nord)
    for point in l_nord:
        cel(point)
#DIVIDER

#DIVIDER
def croissance_est(position_croissance_est):
    x, y, z = position_croissance_est

    iy = randint(0, 4)
    for ix in range(5, randint(7, 9)):
        l_est.append((ix * 4.4 + 0.4 + x, iy * 4.4 + 0.4 + y, 0))
        l_cel_globale.append((ix * 4.4 + 0.4 + x, iy * 4.4 + 0.4 + y, 0))
    print("est----->", len(l_est), l_est)
    for point in l_est:
        cel(point)
#DIVIDER

#DIVIDER
def croissance_sud(position_croissance_sud):
    x, y, z = position_croissance_sud

    ix = randint(0, 4)
    for iy in range(1, randint(1, 4)):
        l_sud.append((ix * 4.4 + 0.4 + x, -4.4 * iy + 0.4 + y, 0))
        l_cel_globale.append((ix * 4.4 + 0.4 + x, -4.4 * iy + 0.4 + y, 0))
    print("sud----->", len(l_sud), l_sud)
    for point in l_sud:
        cel(point)
#DIVIDER

#DIVIDER
def croissance_ouest(position_croissance_ouest):
    x, y, z = position_croissance_ouest

    iy = randint(0, 4)
    for ix in range(1, randint(1, 4)):
        l_ouest.append((-4.4 * ix + 0.4 + x, iy * 4.4 + 0.4 + y, 0))
    print("ouest----->", len(l_ouest), l_ouest)
    for point in l_ouest:
        cel(point)
#DIVIDER

#DIVIDER
def ensemble(position_ensemble):
    x, y, z = position_ensemble
    l_croissance = [0, 1, 2, 3]

    groupement_cel(position_ensemble)
    croissance_nord(position_ensemble)

    l_cel_globale.remove(l_nord[-1])
    for i in range(0, 2):
        if len(l_nord) > 0:
            groupement_cel_0(l_nord[-1])

        if len(l_est) > 0:
            groupement_cel_1(l_est[-1])
        if len(l_est_1) > 0:
            groupement_cel_1(l_est_1[-1])

        if len(l_ouest) > 0:
            groupement_cel_3(l_ouest[-1])
        if len(l_ouest_3) > 0:
            groupement_cel_3(l_ouest_3[-1])
        print("============================")


ensemble((0, 0, 0))


print("il y a", len(l_population), "habitations")
print("il y a", len(l_cel_globale), "cellules au total")

#

Importation circulation secondaire

#

2 DEFINITION GROUPE CELLULES AUTONOME - BASE [500.500] #####################################

#
#

Trame cellules 5x5

#

Suppression aléatoire cellules

#

3 GROUPE CELLULES AUTONOME - MODIFIER POINT D’ANCRAGE ####################

#

Inferieur gauche

#
#

supression aleatoire cellules (densité forte)

#

croissance bras nord

#

croissance bras est

#

croissance ouest

#
#

Superieur gauche

#
#

supression aleatoire cellules (densité forte)

#

croissance bras est

#

croissance bras nord

#
#

Superieur droit

#
#

supression aleatoire cellules (densité forte)

#
#

Inferieur droit

#
#

supression aleatoire cellules (densité forte)

#

croissance ouest

#

croissance bras nord

#

4 DEFINITION CROISSANCE BRAS- 4 DIRECTIONS###########################

#
#

Extension nord

#

Extension est

#
#

Extension sud

#
#

Extension ouest

#
#

5 DEFINITION ENSEMBLE ARBORESCENT###########################

#